{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.5.3"
    },
    "colab": {
      "name": "jupyter_intro.ipynb",
      "provenance": []
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "UHYs319_t654"
      },
      "source": [
        "# Welcome to Jupyter!\n",
        "\n",
        "With Jupyter notebooks you can write and execute code, annotate it with Markdownd and use powerful visualization tools all in one document."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "g_vGzUBVt658"
      },
      "source": [
        "## Running code\n",
        "\n",
        "Code cells can be executed in sequence by pressing Shift-ENTER. Try it now."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "KsFINlIDt659"
      },
      "source": [
        "import math\n",
        "from matplotlib import pyplot as plt"
      ],
      "execution_count": 1,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "R6J8Jg8wt65-"
      },
      "source": [
        "a=1\n",
        "b=2"
      ],
      "execution_count": 2,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "0ri6SBwct65-"
      },
      "source": [
        "a+b"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "uTEPfIYYt65_"
      },
      "source": [
        "## Visualisations\n",
        "\n",
        "Many Python visualization libratries, matplotlib for exampl, intergate seamlessly with Jupyter. Visualiazations will appear directly in the notebook."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "e7MTs8h6t65_"
      },
      "source": [
        "def display_sinusoid():\n",
        "  X = range(180)\n",
        "  Y = [math.sin(x/10.0) for x in X]\n",
        "  plt.plot(X, Y)"
      ],
      "execution_count": 4,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "enbr8Mkxt66A",
        "outputId": "835ee762-5668-47ef-9e98-60ea0bb6bebe",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 265
        }
      },
      "source": [
        "display_sinusoid()"
      ],
      "execution_count": 5,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "f7bugGRlt66B"
      },
      "source": [
        "## Tensorflow environment and accelerators\n",
        "\n",
        "On Google's AI Platform notebooks, Tensorflow support is built-in and powerful accelerators are supported out of the box. Run this cell to test if your current notebook instance has Tensorflow and an accelerator (in some codelabs, you will add an accelerator later)."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "10qLNbOCt66B"
      },
      "source": [
        "import tensorflow as tf\n",
        "from tensorflow.python.client import device_lib\n",
        "print(\"Tensorflow version \" + tf.__version__)"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "YHmDxHr3t66C"
      },
      "source": [
        "try: # detect TPUs\n",
        "    tpu = tf.distribute.cluster_resolver.TPUClusterResolver.connect() # TPU detection\n",
        "    strategy = tf.distribute.TPUStrategy(tpu)\n",
        "except ValueError: # detect GPUs\n",
        "    strategy = tf.distribute.MirroredStrategy() # for GPU or multi-GPU machines (works on CPU too)\n",
        "    #strategy = tf.distribute.get_strategy() # default strategy that works on CPU and single GPU\n",
        "    #strategy = tf.distribute.experimental.MultiWorkerMirroredStrategy() # for clusters of multi-GPU machines\n",
        "\n",
        "print(\"Number of accelerators: \", strategy.num_replicas_in_sync)"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "W3FrSSExt66C"
      },
      "source": [
        "## Restarting\n",
        "\n",
        "If you get stuck, the Jupyter environment can be restarted from the menu Kernel > Restart Kernel.\n",
        "\n",
        "You can also run the entire notebook using Run > Run All Cells. Try it now."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "2dAbg52Jt66D"
      },
      "source": [
        "## License"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "gu_6JUbLt66D"
      },
      "source": [
        "\n",
        "\n",
        "---\n",
        "\n",
        "\n",
        "author: Martin Gorner<br>\n",
        "twitter: @martin_gorner\n",
        "\n",
        "\n",
        "---\n",
        "\n",
        "\n",
        "Copyright 2021 Google LLC\n",
        "\n",
        "Licensed under the Apache License, Version 2.0 (the \"License\");\n",
        "you may not use this file except in compliance with the License.\n",
        "You may obtain a copy of the License at\n",
        "\n",
        "    http://www.apache.org/licenses/LICENSE-2.0\n",
        "\n",
        "Unless required by applicable law or agreed to in writing, software\n",
        "distributed under the License is distributed on an \"AS IS\" BASIS,\n",
        "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n",
        "See the License for the specific language governing permissions and\n",
        "limitations under the License.\n",
        "\n",
        "\n",
        "---\n",
        "\n",
        "\n",
        "This is not an official Google product but sample code provided for an educational purpose\n"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "7OxvQVUXuOm1"
      },
      "source": [
        ""
      ],
      "execution_count": null,
      "outputs": []
    }
  ]
}